package com.suray.system.run;

import com.suray.system.run.core.*;
import com.suray.system.run.instance.SystemMonitorInstance;
import com.suray.system.run.type.DeviceType;
import com.suray.system.run.type.TaskType;

import java.util.Date;
import java.util.List;

public interface SystemMonitorInterface {

    public static SystemMonitorInterface getInstance() {
        return SystemMonitorInstance.systemMonitor;
    }

    /**
     * 获取设备历史故障信息
     * 搜寻起始时间到结束时间段的故障
     * 不填时间则返回全部时间
     *
     * @param series ：序列号
     * @param startTime : 可空
     * @param endTime : 可空
     * @return
     */
    List<ErrorDescription> getDeviceErrorHistory(String series, Date startTime, Date endTime);

    /**
     * 获取当前的故障信息
     * @param series
     * @return ： 无故障时返回null
     */
    ErrorDescription getCurrentErrorDescription(String series);

    /**
     * 获取设备离线信息
     * 搜寻起始时间到结束时间段的离线
     * 不填时间则返回全部时间
     *
     * @param series ：序列号
     * @param startTime
     * @param endTime
     * @return
     */
    List<OfflineDescription> getDeviceOffLineHistory(String series, Date startTime, Date endTime);

    /**
     * 获取当前的离线信息
     * @param series
     * @return ： 在线时返回null
     */
    OfflineDescription getCurrentOffLine(String series);

    /**
     * 获取小车低电量信息
     * 搜寻起始时间到结束时间段的低电量
     * 不填时间则返回全部时间
     *
     * @param series ：序列号
     * @param startTime
     * @param endTime
     * @return
     */
    List<LowBatteryDescription> getCarLowBatteryInfoHistory(String series, Date startTime, Date endTime);

    /**
     * 获取设备当前低电量信息
     * @param series
     * @return ： 小车不处于低电量状态则返回null
     */
    LowBatteryDescription getCurrentLowBatteryInfo(String series);

    /**
     * 获取小车充电信息
     * @param series
     * @param startTime
     * @param endTime
     * @return
     */
    List<ChargeInfo> getCarChargeInfoHistory(String series, Date startTime, Date endTime);

    /**
     * 获取设备当前充电信息
     * @param series
     * @return ： 不在充电则返回null
     */
    ChargeInfo getCurrentChargeInfo(String series);

    /**
     * 获取小车充电次数
     *
     * @param series ：序列号
     * @return
     */
    int getCarChargeNum(String series);

    /**
     * 获取设备数量
     * @param deviceType
     * @return
     */
    int getDeviceNum(DeviceType deviceType);

    /**
     * 获取当前有任务的设备
     * @return ： 所有任务中的设备的序列号
     * @param deviceType ： 设备类型
     */
    List<String> getTaskingDevice(DeviceType deviceType);

    /**
     * 获取货位数量
     * @return
     */
    int getCargoSpaceNum();

    /**
     * 获取空闲的货位数量
     * @return
     */
    int getUsedCargoSpaceNum();

    /**
     * 获取小车实时信息
     * @param series
     * @return
     */
    RgvInfo getRgvInfo(String series);

    /**
     * 获取提升机实时信息
     * @param series
     * @return
     */
    LifterInfo getLifterInfo(String series);

    /**
     * 获取输送线实时信息
     * @param series
     * @return
     */
    ConveryInfo getConveryInfo(String series);

    /**
     * 获取任务剩余时间
     * @param taskId
     * @return
     */
    int getTaskLeftTime(String taskId);

    /**
     * 获取设备今天工作时间:ms
     * @param series
     * @return
     */
    int getTodayDeviceWorkTime(String series);

    /**
     * 获取设备总运行时间:ms
     * @param series
     * @return
     */
    long getDeviceWorkTime(String series);

    /**
     * 获取设备总任务数量
     * @param series
     * @return
     */
    int getDeviceTotalTaskNum(String series);

    /**
     * 获取设备入库任务数量
     * 搜寻起始时间到结束时间段的低电量
     * 不填时间则返回全部时间
     * @param series
     * @param startTime
     * @param endTime
     * @return
     */
    int getDeviceInCargoTaskNum(String series, Date startTime, Date endTime);

    /**
     * 获取设备出库任务数量
     * 搜寻起始时间到结束时间段的低电量
     * 不填时间则返回全部时间
     * @param series
     * @param startTime
     * @param endTime
     * @return
     */
    int getDeviceOutCargoTaskNum(String series, Date startTime, Date endTime);

    /**
     * 获取设备移库任务数量
     * 搜寻起始时间到结束时间段的低电量
     * 不填时间则返回全部时间
     * @param series
     * @param startTime
     * @param endTime
     * @return
     */
    int getDeviceTransCargoTaskNum(String series, Date startTime, Date endTime);


    /**
     * 查找已完成的任务数量
     * @param taskType
     * @return
     */
    public int getFinishTaskNum(TaskType taskType);

    /**
     * 查找执行中的任务数量
     * @param taskType
     * @return
     */
    public int getExecingTaskNum(TaskType taskType);

    /**
     * 查找取消的任务数量
     * @param taskType
     * @return
     */
    public int getCancelTaskNum(TaskType taskType);

    /**
     * 查找故障的任务数量
     * @param taskType
     * @return
     */
    public int getErrorTaskNum(TaskType taskType);

    /**
     * 查找等待执行的任务数量
     * @return
     */
    public int getWaitForExecTaskNum(TaskType taskType);
}
